package controlador;
import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;

import javax.swing.JOptionPane;
import modelo.Categoria;
import modelo.CategoriaDao;
import modelo.Receta;
import modelo.RecetaDao;
import modelo.Ingrediente;
import modelo.Producto;
import modelo.ProductoDao;
import modelo.Producto;
import modelo.IngredienteDao;
import vista.frmIngredienteModeloTabla;
import vista.frmRecetaModeloTabla;
import vista.frmproducto;

public class controladorProducto implements ActionListener{
	private frmproducto frmpro;
	public CategoriaDao categoriadao=new CategoriaDao();
	public ProductoDao productodao = new ProductoDao();
	public IngredienteDao ingredientedao =new IngredienteDao();
	public controladorProducto() {
		super();
		this.frmpro = new frmproducto();
		this.frmpro.setLocation(480,210);
		this.frmpro.setVisible(true);	
		this.frmpro.addListener(this);
		this.frmpro.CargarCombo(categoriadao.CargarCombo());
	    this.frmpro.CargarComboingrediente(ingredientedao.CargarCombo());
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		
		if (actionCommand.equals("Guardar")) {
			RegistrarProducto();
		}		
		else if (actionCommand.equals("Cancelar")) {
			frmpro.borrarDatos();
		}
		else if(actionCommand.equals("Incluir")){
			Ingrediente ingre=new Ingrediente();
			IngredienteDao ingredientedao=new IngredienteDao();
			ingre=ingredientedao.BuscarIngrediente(frmpro.getingrediente());
		    boolean encontrado=ValidarRepetirIngrediente(ingre);
			if(!encontrado)	
			frmpro.getModelo().incluir(ingre.getCodigoingrediente(), ingre.getNombreingrediente(), frmpro.getcantidad(), ingre.getUnidad());
			else
				frmpro.mostrarMensaje("El ingrediente ya esta en la receta");
		}else if(actionCommand.equals("Remover"))
		{
			frmpro.getModelo().Remover(frmpro.Posicion());
		}else if (actionCommand.equals("Salir"))
		{
		this.frmpro.dispose();
		}
		
	}
    public boolean ValidarRepetirIngrediente(Ingrediente ingre)
    {
    	boolean encontrado=false; 
		int i=frmpro.getModelo().getRowCount();
		for(int j=0; j<i;j++)
		{
			String hola =String.valueOf(frmpro.getModelo().getValueAt(j, 0));
			String chao =ingre.getCodigoingrediente();
			if(hola.equalsIgnoreCase(chao))
			{
				encontrado=true;
			}
		}
		return encontrado;
    }
	private void RegistrarProducto(){
	  	try
		{
	    	if(frmpro.getcodigoproducto().equals("") || 
	    			frmpro.getnombreproducto().equals("")||frmpro.getprecio().equals(""))
	    		
	    		frmpro.mostrarMensaje("Debe llenar todos los datos para poder registrar producto");
	    	else
	    	{
                RecetaDao recetadao=new RecetaDao();
	    	    String codigo=productodao.Busqueda(frmpro.getcategoria());
		        Producto producto = new Producto(frmpro.getcodigoproducto(),frmpro.getnombreproducto(),codigo,Double.parseDouble(frmpro.getprecio()));
		        productodao.RegistrarProducto(producto);
		        
		        int i=frmpro.getModelo().getRowCount();
		        for(int j=0; j<i;j++)
		        {
		        Receta receta =new Receta("R"+frmpro.getcodigoproducto(),frmpro.getcodigoproducto(),String.valueOf(frmpro.getModelo().getValueAt(j, 0)), Double.parseDouble(String.valueOf(frmpro.getModelo().getValueAt(j, 2))));
		        recetadao.RegistrarReceta(receta);
		        }
		        frmpro.mostrarMensaje("El Producto fue registrada con exito");
		    	frmpro.borrarDatos();
		    	frmpro.getModelo().Limpiar();
	    	}
		}catch(Exception e)
		{
			frmpro.mostrarMensaje("No se pudo registrar el Producto, verifique que los datos sean correctos");
		  	frmpro.borrarDatos();
		}
	}

}
